package main

import (
	"database/sql"
	"log"

	_ "github.com/go-sql-driver/mysql"
)

func checkError(e error) {
	if e != nil {
		log.Fatal(e)
	}
}

func Things(db *sql.DB) {
	// 开启事务
	tx, err := db.Begin()
	checkError(err)
	// 执行sql
	ret1, err := tx.Exec("update user set password = '111111' where id = ?", 1)
	checkError(err)

	ret2, err := tx.Exec("update user set password = '111111' where id = ?", 5)
	checkError(err)
	// 如果id不存在，受影响行数则为0
	updNums1, _ := ret1.RowsAffected()
	updNums2, _ := ret2.RowsAffected()

	if updNums1 > 0 && updNums2 > 0 { // 只有两条都执行成功，那么才提交
		tx.Commit() // 提交事务
		log.Println("Success")
	} else { // 否则回滚
		tx.Rollback() // 回滚事务
		log.Println("Fail")
	}
}

func main() {
	db, err := sql.Open("mysql", "root:123123@tcp(127.0.0.1:3306)/test")
	defer db.Close()
	checkError(err)
	Things(db)
}
